#ifndef LAUNCH_PARSER_H
#define LAUNCH_PARSER_H

#include "object/node_info.h"
#include "object/launch_node.h"
#include <tinyxml2/tinyxml2.h>
#include <optional>

/**
 * @brief:  launch解析器
 */
class LaunchParser
{
public:
    LaunchParser();
    virtual ~LaunchParser();

    /**
     * @brief:  根据传入的launch文件解析节点信息
     */
    std::optional<LaunchNode> parserLaunchFile(const std::string &launchFile);

private:
    /**
     * @brief:  解析document，具体内容解析接口
     */
    std::optional<LaunchNode> parserDocument(const tinyxml2::XMLDocument &document);

    /**
     * @brief:  解析launch内部某个元素
     * @param[in]:  element     launch内部的某个元素，不为nullptr
     * @param[in]:  launchNode  如果是node，则解析后追加在launchNode中
     * @return  是否解析成功，出现格式错误等，返回false，否则返回true
     */
    bool parserLaunchElement(const tinyxml2::XMLElement *element, LaunchNode &launchNode);
};


#endif //LAUNCH_PARSER_H
